﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using Npgsql;
using System.Configuration;


namespace BMG.DAL
{
    /// <summary>
    /// Application BMG
    /// Création le 31/03/2011
    /// 
    /// Classe d'accès aux données
    /// 
    /// Modifications:
    /// -09/04 BET Ajout des champs nécessaires pour la connection avec la base de données
    /// -22/05 BET Modification de toutes les methodes pour utiliser les commandes paramètrées à la place des chaines de caractères construites 
    ///         Dynamiquement. cfr GetCategorieHistorique() pour exemple
    /// </summary>
    public static class Data_Provider 
    {
        #region FIELDS
        //private static string BMGConnectionString = ConfigurationManager.ConnectionStrings["BMGDB"].ToString();

        #endregion

        #region ACCESSORS

        #endregion

        #region METHODS

        #region GET

        #region CATEGORIES
        /// <summary>
        /// Méthode de récupération de la liste des catégories
        /// </summary>
        /// <param name="aDescriptionNom">Nom ou description de la catégorie</param>
        /// <param name="aID_PARENT">Identifiant de la catégorie Parent</param>
        /// <returns>Datatable</returns>
        public static DataTable GetCategorieList(string aDescriptionNom, int? aID_PARENT)
        {
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {
                NpgsqlCommand command = new NpgsqlCommand("GetCategorieList", connex);
                command.CommandType = CommandType.StoredProcedure;
                if (aDescriptionNom != null)
                {
                    command.Parameters.Add(new NpgsqlParameter("descriptionnom", NpgsqlTypes.NpgsqlDbType.Text)).Value = aDescriptionNom;                   

                }
                if (aID_PARENT != null && aID_PARENT!=-1)
                {
                    command.Parameters.Add(new NpgsqlParameter("idparent", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_PARENT;
                }

                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();
                //Retour

                return Result;
            }
        }

        /// <summary>
        /// Méthode de récupération des données d'une catégorie
        /// </summary>
        /// <param name="aID_CATEGORIE">Identifiant de la catégorie dont on veut récupérer les données</param>
        /// <returns>Datarow</returns>
        public static DataRow GetCategorie(int aID_CATEGORIE)
        {
            DataTable dtCat = new DataTable();
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {
                NpgsqlCommand command = new NpgsqlCommand("GetCategorie", connex);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add(new NpgsqlParameter("idcategorie", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_CATEGORIE;                
                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();
                //Retour
                if (Result.Rows.Count > 0)
                {
                    return Result.Rows[0];
                }
                return null;
            }
        } 

        /// <summary>
        /// Méthode de récupération de l'historique des modification sur les catégories entre deux dates passées en format date
        /// </summary>
        /// <param name="aID_CATEGORIE">ID de la catégorie voulue</param>
        /// <param name="aDateFrom">Date de début de recherche des modification voulues</param>
        /// <param name="aDateTo">Date de fin de recherche des modification voulues</param>
        /// <returns>DataRow</returns>
        public static DataTable GetCategorieHistorique(int? aID_CATEGORIE, DateTime aDateFrom, DateTime aDateTo)//le int? permet de spécifier une valeur null pour la variable
        {
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {

                //Notre ancienne méthode

                //        ////création commande
                //        //NpgsqlCommand command = connex.CreateCommand();

                //        //if (aID_CATEGORIE == null)
                //        //{
                //        //    command.CommandText = "SELECT * FROM GetCategorieHistorique('" + aDateFrom + "','" + aDateTo + "')";
                //        //}
                //        //else
                //        //{
                //        //    command.CommandText = "SELECT * FROM GetCategorieHistorique('" + aID_CATEGORIE + "','" + aDateFrom + "','" + aDateTo + "')";
                //        //}

                //        ////création dataAdapter
                //        //NpgsqlDataAdapter adpt = new NpgsqlDataAdapter(command);
                //        //adpt.Fill(dtCatHist);

                NpgsqlCommand command = new NpgsqlCommand("GetCategorieHistorique", connex);
                command.CommandType = CommandType.StoredProcedure;
                if (aID_CATEGORIE != null)
                {
                    command.Parameters.Add(new NpgsqlParameter("idcategorie", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_CATEGORIE;
                }
                command.Parameters.Add(new NpgsqlParameter("datemin",NpgsqlTypes.NpgsqlDbType.Date)).Value = aDateFrom;
                command.Parameters.Add(new NpgsqlParameter("datemax", NpgsqlTypes.NpgsqlDbType.Date)).Value = aDateTo;

                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();
                //Retour

                return Result;
            }
        }

        ///// <summary>
        ///// Méthode de récupération de l'historique des modification sur les catégories entre deux dates passées en format texte
        ///// </summary>
        ///// <param name="aID_CATEGORIE">ID de la catégorie voulue</param>
        ///// <param name="aDateFrom">Date de début de recherche des modification voulues</param>
        ///// <param name="aDateTo">Date de fin de recherche des modification voulues</param>
        ///// <returns>DataRow</returns>
        //public static DataTable GetCategorieHistorique(int? aID_CATEGORIE, String aDateFrom, String aDateTo)
        //{
        //    DataTable dtCatHist = new DataTable();
        //    using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
        //    {
        //        //Notre ancienne méthode

        //        ////création commande
        //        //NpgsqlCommand command = connex.CreateCommand();

        //        //if (aID_CATEGORIE == null)
        //        //{
        //        //    command.CommandText = "SELECT * FROM GetCategorieHistorique('" + aDateFrom + "','" + aDateTo + "')";
        //        //}
        //        //else
        //        //{
        //        //    command.CommandText = "SELECT * FROM GetCategorieHistorique('" + aID_CATEGORIE + "','" + aDateFrom + "','" + aDateTo + "')";
        //        //}

        //        ////création dataAdapter
        //        //NpgsqlDataAdapter adpt = new NpgsqlDataAdapter(command);
        //        //adpt.Fill(dtCatHist);

        //        //Notre nouvelle méthode
        //        //Creation de la commande
        //        NpgsqlCommand command = new NpgsqlCommand("GetCategorieHistorique", connex);
        //        command.CommandType = CommandType.StoredProcedure;
        //        if (aID_CATEGORIE != null)
        //        {
        //            command.Parameters.Add(aID_CATEGORIE); 
        //        }
        //        command.Parameters.Add(aDateFrom);
        //        command.Parameters.Add(aDateTo);

        //        //Ouverture de la connection
        //        connex.Open();
        //        //Création et remplissage du reader
        //        NpgsqlDataReader reader = command.ExecuteReader();
        //        //Création de la DataTable et remplissage avec le reader
        //        DataTable Result = new DataTable();
        //        Result.Load(reader);

        //        //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
        //        connex.Close();
        //        //Retour

        //        return Result;
        //    }            
        //}
        #endregion

        #region PRODUITS
        /// <summary>
        /// Méthode de récupération des produits
        /// </summary>
        /// <param name="aDescription">Description des produits voulus</param>
        /// <param name="aID_CATEGORIE">Catégorie des produits voulus</param>
        /// <returns>DataTable</returns>
        public static DataTable GetProduitslist(string aDescription, int? aID_CATEGORIE)
        {
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {
                NpgsqlCommand command = new NpgsqlCommand("GetProduitList", connex);
                command.CommandType = CommandType.StoredProcedure;
                if (aDescription != null)
                {
                    command.Parameters.Add(new NpgsqlParameter("descriptionnom", NpgsqlTypes.NpgsqlDbType.Text)).Value = aDescription;
                }
                if (aID_CATEGORIE != null && aID_CATEGORIE != -1)
                {
                    command.Parameters.Add(new NpgsqlParameter("idcategorie", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_CATEGORIE; 
                }
                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();
                //Retour

                return Result;
            }

        }

        /// <summary>
        /// Méthode de récupération des détails de tous les produits
        /// </summary>
        /// <returns>DataTable</returns>
        public static DataTable GetProduitList()
        {
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {
                //Creation de la commande
                NpgsqlCommand command = new NpgsqlCommand("GetProduitList", connex);
                command.CommandType = CommandType.StoredProcedure;                
                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();
                //Retour

                return Result;

            }
        }

        /// <summary>
        /// Méthode de récupération des détails d'un produit particulier
        /// </summary>
        /// <param name="aID_PRODUIT">Identifiant du produit voulu</param>
        /// <returns>DataRow</returns>
        public static DataRow GetProduit(int aID_PRODUIT)
        {
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {
                //Creation de la commande
                NpgsqlCommand command = new NpgsqlCommand("GetProduit", connex);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add(new NpgsqlParameter("idproduit", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_PRODUIT;
                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();
                if (Result.Rows.Count > 0)
                {
                    return Result.Rows[0];
                }
                return null;
            }
        }

        /// <summary>
        /// Méthode de récupération de l'historique des modification d'un produit entre 2 dates passées en format date
        /// </summary>
        /// <param name="aID_PRODUIT">ID du produit recherché</param>
        /// <param name="aDateFrom">Date de début de recherche des modification voulues</param>
        /// <param name="aDateTo">Date de fin de recherche des modification voulues</param>
        /// <returns>DataRow</returns>
        public static DataTable GetProduitHistorique(int? aID_PRODUIT, DateTime aDateFrom, DateTime aDateTo)
        {
            using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
            {
                //Creation de la commande
                NpgsqlCommand command = new NpgsqlCommand("GetProduitHistorique", connex);
                command.CommandType = CommandType.StoredProcedure;
                if (aID_PRODUIT != null)
                {
                    command.Parameters.Add(new NpgsqlParameter("idproduit", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_PRODUIT;
                }
                command.Parameters.Add(new NpgsqlParameter("datemin", NpgsqlTypes.NpgsqlDbType.Date)).Value = aDateFrom;
                command.Parameters.Add(new NpgsqlParameter("datemax", NpgsqlTypes.NpgsqlDbType.Date)).Value = aDateTo;
                //Ouverture de la connection
                connex.Open();
                //Création et remplissage du reader
                NpgsqlDataReader reader = command.ExecuteReader();
                //Création de la DataTable et remplissage avec le reader
                DataTable Result = new DataTable();
                Result.Load(reader);

                //Fermeture de la connexion attention ne peux pas se faire avant car le load Utilise la connexion!!!
                connex.Close();               
                return Result;
            }
        }

        ///// <summary>
        ///// Méthode de récupération de l'historique des modification d'un produit entre 2 dates passées en format texte
        ///// </summary>
        ///// <param name="aID_PRODUIT">ID du produit recherché</param>
        ///// <param name="aDateFrom">Date de début de recherche des modification voulues</param>
        ///// <param name="aDateTo">Date de fin de recherche des modification voulues</param>
        ///// <returns>DataRow</returns>
        //public static DataRow GetProduitHistorique(int? aID_PRODUIT, String aDateFrom, String aDateTo)
        //{
        //    DataTable dtProdHist = new DataTable();
        //    using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
        //    {
        //        NpgsqlCommand command = new NpgsqlCommand();
        //        if (aID_PRODUIT == null)
        //        {
        //            command.CommandText = "SELECT * FROM GetProduitHistorique('" + aDateFrom + "','" + aDateTo + "')";
        //        }
        //        else
        //        {
        //            command.CommandText = "SELECT * FROM GetProduitHistorique('" + aID_PRODUIT + "','" + aDateFrom + "','" + aDateTo + "')";
        //        }
        //        NpgsqlDataAdapter adpt = new NpgsqlDataAdapter();
        //        adpt.Fill(dtProdHist);
        //    }
        //    if (dtProdHist.Rows.Count == 0)
        //        return null;
        //    else
        //        return dtProdHist.Rows[0];
        //}
        #endregion

        #endregion

        #region INSERT

        #region CATEGORIES
        /// <summary>
        /// Méthode d'insertion d'une catégorie
        /// </summary>
        /// <param name="aIntitule">Intitule de la categorie</param>
        /// <param name="aDescription">Description de la categorie</param> 
        /// <param name="aPID_CAT">Identifiant de la categorie parent</param>
        /// <returns>1 si ok, -1 si probleme</returns>
        public static int InsertCategorie(string aIntitule, string aDescription, int? aPID)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("insertcategorie", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("Intitule_CAT", NpgsqlTypes.NpgsqlDbType.Varchar).Value = aIntitule;
                    command.Parameters.Add("Description_CAT", NpgsqlTypes.NpgsqlDbType.Varchar).Value = aDescription;
                    command.Parameters.Add("PID_CAT", NpgsqlTypes.NpgsqlDbType.Integer).Value = aPID;
                    connex.Open();
                    command.ExecuteNonQuery();
                    connex.Close();
                    return 1;
                }
            }
            catch (Exception)
            {
                throw;               
            }
        }

        #endregion

        #region PRODUITS
        /// <summary>
        /// Méthode d'inertion d'un produit
        /// </summary>
        /// <param name="aIntitule">Intitulé du produit à insérer</param>
        /// <param name="aDescription">Description du produit à insérer</param>
        /// <param name="aPrix">Prix du produit à insérer</param>
        /// <param name="aStock">Stock restant du produit à insérer</param>
        /// <param name="aID_Cat">Catégorie du produit à insérer</param>
        /// <returns>1 si ok, -1 si probleme</returns>
        public static int InsertProduit(String aIntitule, String aDescription, decimal aPrix, int aStock, int aID_Cat)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("insertproduit", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("Intitule", NpgsqlTypes.NpgsqlDbType.Varchar).Value = aIntitule;
                    command.Parameters.Add("Description", NpgsqlTypes.NpgsqlDbType.Varchar).Value = aDescription;
                    command.Parameters.Add("Prix", NpgsqlTypes.NpgsqlDbType.Numeric).Value = aPrix;
                    command.Parameters.Add("Stock", NpgsqlTypes.NpgsqlDbType.Integer).Value = aStock;
                    command.Parameters.Add("IDcategorie", NpgsqlTypes.NpgsqlDbType.Integer).Value = aID_Cat;
                    connex.Open();
                    command.ExecuteNonQuery();
                    connex.Close();
                    return 1;
                }
            }
            catch (Exception)
            {                
                throw;
            }
        }
        #endregion

        #endregion

        #region UPDATE

        #region CATEGORIES
        /// <summary>
        /// Méthode de mise à jour d'une catégorie
        /// </summary>
        /// <param name="aID_CAT">ID de la catégorie à modifier</param>
        /// <param name="aINTITULE_CAT">Intitulé de la catégorie à modifier</param>
        /// <param name="aDESCRIPTION_CAT">Description de la catégorie à modifier</param>
        /// <param name="aPID_CAT">Catégorie Parent de la catégorie à modifier</param>
        /// <returns>1 si ok, -1 si probleme</returns>
        public static int UpdateCategorie(int aID_CAT, string aINTITULE_CAT, string aDESCRIPTION_CAT, int? aPID_CAT)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("UpdateCategorie", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add(new NpgsqlParameter("IDCategorie", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aID_CAT;
                    command.Parameters.Add(new NpgsqlParameter("Intitule", NpgsqlTypes.NpgsqlDbType.Varchar)).Value = aINTITULE_CAT;
                    command.Parameters.Add(new NpgsqlParameter("Description", NpgsqlTypes.NpgsqlDbType.Varchar)).Value = aDESCRIPTION_CAT;
                    command.Parameters.Add(new NpgsqlParameter("PID", NpgsqlTypes.NpgsqlDbType.Integer)).Value = aPID_CAT;
                    connex.Open();
                    command.ExecuteScalar();
                    connex.Close();
                    return 1;
                }
            }
            catch (Exception)
            {
                throw;                
            }
        }

        #endregion

        #region PRODUITS
        /// <summary>
        /// Méthode de mise à jour d'un produit
        /// </summary>
        /// <param name="ID_PRO">Id du produit à mettre à jour</param>
        /// <param name="Intitule_PRO">Intitulé du produit à mettre à jour</param>
        /// <param name="Description_PRO">Description du produit à mettre à jour</param>
        /// <param name="Prix_PRO">Prix du produit à mettre à jour</param>
        /// <param name="Stock_PRO">Stock restant du produit à mettre à jour</param>
        /// <param name="ID_Categorie_PRO">Catégorie du produit à mettre à jour</param>
        /// <returns>1 si ok, -1 si probleme</returns>
        public static int UpdateProduit(int ID_PRO, String Intitule_PRO, String Description_PRO, decimal Prix_PRO, int Stock_PRO, int ID_Categorie_PRO)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("UpdateProduit", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("ID_PRO", NpgsqlTypes.NpgsqlDbType.Integer).Value = ID_PRO;
                    command.Parameters.Add("Intitule_PRO", NpgsqlTypes.NpgsqlDbType.Varchar).Value = Intitule_PRO;
                    command.Parameters.Add("Description_PRO", NpgsqlTypes.NpgsqlDbType.Varchar).Value = Description_PRO;
                    command.Parameters.Add("Prix_PRO", NpgsqlTypes.NpgsqlDbType.Numeric).Value = Prix_PRO;
                    command.Parameters.Add("StockRestant_PRO", NpgsqlTypes.NpgsqlDbType.Integer).Value = Stock_PRO;
                    command.Parameters.Add("ID_CAT", NpgsqlTypes.NpgsqlDbType.Integer).Value = ID_Categorie_PRO;
                    connex.Open();
                    command.ExecuteNonQuery();
                    connex.Close();
                    return 1;

                }
            }
            catch (Exception)
            {
                throw;              
            }
        }

        /// <summary>
        /// Méthode de modification du prix d'un produit
        /// </summary>
        /// <param name="ID_PRO">ID du produit à modifier</param>
        /// <param name="Prix_PRO">Nouveau prix du produit</param>
        /// <returns>1 si ok, -1 si probleme</returns>
        public static int UpdateProduitPrix(int ID_PRO, float Prix_PRO)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("UpdateProduitPrix", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("ID_PRO", NpgsqlTypes.NpgsqlDbType.Integer).Value = ID_PRO;
                    command.Parameters.Add("Prix_PRO", NpgsqlTypes.NpgsqlDbType.Numeric).Value = Prix_PRO;
                    connex.Open();
                    command.ExecuteNonQuery(); 
                    connex.Close();

                    return 1;
                }
            }
            catch (Exception)
            {
                return -1;
                throw;
            }
        }

        /// <summary>
        /// Méthode d'update de la catégorie d'un produit
        /// </summary>
        /// <param name="ID_PRO">Identifiant du produit</param>
        /// <param name="ID_CAT">Identifiant de la catégorie</param>
        /// <returns>1 si ok, sinon -1</returns>
        public static int UpdateProduitCat(int ID_PRO, int ID_CAT)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("UpdateProduitCat", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("ID_PRO", NpgsqlTypes.NpgsqlDbType.Integer).Value = ID_PRO;
                    command.Parameters.Add("ID_CAT", NpgsqlTypes.NpgsqlDbType.Integer).Value = ID_CAT;
                    connex.Open();
                    command.ExecuteNonQuery(); 
                    connex.Close();

                    return 1;
                }
            }
            catch (Exception)
            {
                return -1;
                throw;
            }
        }

        /// <summary>
        /// Méthode de modification du stock restant d'un produit
        /// </summary>
        /// <param name="ID_PRO">Id du produit à modifier</param>
        /// <param name="Stock_PRO">Nouveau stock du produit</param>
        /// <returns></returns>
        public static int UpdateProduitStock(int ID_PRO, int Stock_PRO)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("UpdateProduitStock", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("ID_PRO", NpgsqlTypes.NpgsqlDbType.Integer).Value = ID_PRO;
                    command.Parameters.Add("StockRestant_PRO", NpgsqlTypes.NpgsqlDbType.Integer).Value = Stock_PRO;
                    connex.Open();
                    command.ExecuteNonQuery();
                    return 1;           
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #endregion

        #region DELETE

        #region CATEGORIES
        /// <summary>
        /// Méthode de suppression d'une catégorie
        /// </summary>
        /// <param name="aID_CATEGORIE">Identifiant de la catétorie à supprimer</param>
        /// <returns>1 si ok, -1 si problème</returns>
        public static int DeleteCategorie(int aID_CATEGORIE)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("DeleteCategorie", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("IDcategorie", NpgsqlTypes.NpgsqlDbType.Integer).Value = aID_CATEGORIE;
                    connex.Open();
                    command.ExecuteNonQuery(); //permet de retourner un entier indiquant le nbr de row affectées
                    connex.Close();
                    return 1;
                }
            }
            catch (Exception)
            {
                return -1;
                throw;
            }
        }
        #endregion

        #region PRODUITS
        /// <summary>
        /// Méthode de suppression d'un produit
        /// </summary>
        /// <param name="aID_PRODUIT">Identifiant du produit à supprimer</param>
        /// <returns>1 si ok, -1 si probleme</returns>
        public static int DeleteProduit(int aID_PRODUIT)
        {
            try
            {
                using (NpgsqlConnection connex = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["BMGDB"].ToString()))
                {
                    NpgsqlCommand command = new NpgsqlCommand("DeleteProduit", connex);
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("IDproduit", NpgsqlTypes.NpgsqlDbType.Integer).Value = aID_PRODUIT;
                    connex.Open();
                    command.ExecuteNonQuery();
                    connex.Close();

                    return 1;
                }
            }
            catch (Exception)
            {
                return -1;
                throw;
            }
        }

        /// <summary>
        /// Méthode de suppression des produits d'une catégorie
        /// </summary>
        /// <param name="aID_CATEGORIE">Identifiant de la catégorie pour laquelle on veut supprimer les produits</param>
        /// <returns>1 si ok, -1 si problème</returns>
        public static int DeleteProduitsFromCategorie(int aID_CATEGORIE)
        {
            throw new NotImplementedException();
        }

        #endregion

        #endregion

        #region MISC
        /// <summary>
        /// Méthode de déplacements des produits d'une catégorie vers une autre
        /// </summary>
        /// <param name="aID_CATEGORIE_FROM">Identifiant de la catégorie de départ</param>
        /// <param name="aID_CATEGORIE_TO">Identifiant de la catégorie ciblée</param>
        /// <returns>1 si ok; -1 si problème</returns>
        static public int MoveProduitsToCategorie(int aID_CATEGORIE_FROM, int aID_CATEGORIE_TO)
        {
            throw new NotImplementedException();
        }
        #endregion
        #endregion
    }

}
